# 爬虫的核心代码，用于解析网页内容并提取数据。


import re

from html_downloader import HtmlDownloader
from product import Product


class HtmlParser:

    # 定义匹配提取数据的正则表达式
    # [\s\S]*? 匹配<li>标签内的任意字符，包括空格、换行符等
    item_pattern = r'<li class="brick-item">[\s\S]*?</li>'

    # 定义匹配标题的正则表达式
    title_pattern = r'<h3 class="title"><a href="javascript:;">([\s\S]*?)</a></h3>'

    # 定义匹配描述的正则表达式
    desc_pattern = r'<p class="desc">([\s\S]*?)</p>'

    # 定义匹配价格的正则表达式
    price_pattern = r'<span class="num">([\s\S]*?)</span>'


    # 解析网页内容并提取数据, 返回 set 类型数据
    def parser(self, html):
        products = set()
        items = re.findall(self.item_pattern, html)
        for item in items:
            title = re.findall(self.title_pattern, item)[0]
            desc = re.findall(self.desc_pattern, item)[0]
            price = re.findall(self.price_pattern, item)[0]
            products.add(Product(title, desc, price))
        return products

# 测试代码
# 创建HTML下载器对象
# downloader = HtmlDownloader()
# # 下载网页内容
# html = downloader.download(url='http://127.0.0.1:8848/xiaomi/index.html')
# # 创建HTML解析器对象
# parser = HtmlParser()
# # 解析网页内容并提取数据
# products = parser.parser(html)
# for p in products:
#     print(p)
